# ============================================
# 知识点
# 变量
# 在js中首次定义一个变量名的时候需要用关键字声明
# 1.关键字var
# var name= 'jason'
# 2. es6推出的新语法
# let name= 'jason'
# 如果你的编辑器支持的版本是5.1那么无法使用let
# 如果是6.0则向下兼容var let

# # var与let的区别
# n=10
# for n in range(5) :
# print(n)
# print(n) # 10
# var在for循环里面定义也会影响到全局
# let在局部定义只会在局部生效
# ============================================
# 变量
# js变量的命名规范
# 1.变量名只能是
# 数字字母下划线$
# 2.变量名命名规范(不遵循也可以)
# 1. js中推荐使用驼峰式命名
# userName
# dataOfDb
# 2. python推荐使用下划线的方式
# user_ name
# data_ of_ db
# 3.不能用关键字作为变量名
# 不需要记忆
# js代码的书写位置
# 1.可以单独开设js文件书写
# 2.还可以直接在浏览器提供的console界面书写
# 在用浏览器书写js的时候左上方的清空按钮只是清空当前页面代码其实还在
# 如果你想要重新来最好重新开设-一个页面
# (在使用浏览器书写你自己的js代码的时候推荐你在自己的html页面打开)
# ============================================
# 数字类型(number)
# 类型转换
# parseInt( ' 12312312' )
# 12312312
# parseFloat('11.11')
# 11.11
# parseInt( ' 11.11' )
# 11
# parseInt( ' 123sdasdajs2312dasd' )
# 123
# parseInt( ' asdasdad123sdasdajs2312dasd')
# NaN
# ============================================
# 字符类型(string)
# var s='jason'
# typeof s
# "string"

# var sl = "jason"
# typeof s1;
# "string"
# vars2='''egon'''
# //不支持三引号
# VM665:1 Uncaught SyntaxError: Unexpected string

# //模版字符串
# var s3 =`    (esa下面那个~键)
# asdkajsd
# sdjkladj
# asdjlajdkl`
# typeof s3
# "string"

# //模版字符串除了可以定义多行文本之外还可以实现格式化字符串操作
# var name =' jason
# var age = 18
# var sss =`
# my name is ${name} and my age is ${age}`
# my name is jason and my age is 18

# //字符串的拼接
# //在python中不推荐你使用+做拼接join
# //在js中推荐你直接使用+做拼接
# name + age
# ============================================
# 字符类常用方法
# var name1 = '  egonDSB  ';
# undefined
# name1
# egonDSB
# "
# name1.trim()
# "egonDSB"
# name1. trimLeft( )
# "egonDSB   "
# name1 . trimRight( )
# "   egonDSB"
# var name2 = '$$ jason$$ '
# undefined
# name2.trim('$') # 不能加括号指定去除的内容
# "$$jason$$ "

# name2. charAt(0)
# "$"
# name2. index0f( 'as')
# 3


# name2. substring(0,5)
# ' $$jas"
# name2.slice(0,5)
# "$$jas"
# name2. substring(0,-1) # 不识别负数
# name2.slice(0,-1) # 后面推荐就使用slice
# "$$jason$ "


# var name3 = ' eGoNDsb12366 6HahA'
# undefined
# name3. toLocaleLowerCase( )
# " egondsb123666haha"
# name3. toUpperCase()
# " EGONDSB123666HAHA"
# var name = ' tank | hecha |liaomeil mengsao|...'
# undefined
# name.split('|' )
# (5) [ "tank", "hecha", "liaomei", "mengsao", "..."]
# name. split('|',2)
# (2) [ "tank", "hecha"]0: "tank"1: "hecha"length: 2 proto__ : Array(0)
# name.split('|',10) # 第二个参数不是限制切割字符的个数还是获取切割之后元素的个数
# (5) ["tank", "hecha", "liaomei", "mengsao", "..."]

# name . concat ( namel，name2 )
# "tank | hecha| liaomei| mengsao|... egonDSB $$ jason$$ "
# var p = 1111
# undef ined
# name . concat(p)
# # js是弱类型(内部会自动转换成相同的数据类型做操作)
# "tank |hechal liaomei| mengsao| . . .1111"
# ============================================
# 布尔值(boolean)
# 1.在python中布尔值是首字母大写的
# True
# False
# 2.但是在js中布尔值是全小写的
# true
# false|
# I
# #布尔值是false的有哪些
# 空字符串、0、null、undefined、 NaN
# ============================================
# null与undefined
# null
# 表示值为空一般都是指定或者清空一个变量时使用
# name = ' jason '
# name = null
# undef ined
# 表示声明了一个变量但是没有做初始化操作(没有给值)
# 函数没有指定返回值的时候返回的也是undefined
# 参考博客图解:厕所卷纸
# https:/ /www . cnblogs . com/ Dominic-Ji/p/9111021.html
# ============================================
# 对象
# -切皆对象
# ●数组(类似于python里面的列表)
# []
# var X = [11,22,33,44,55]
# typeof X
# "object"
# var L = [ 11, 'sdasd' ,11.11, true ]
# L[1]
# "sdasd'
# L[-1] # 不支持负数索引

# var L = [111,222,333 , 444, 555 , 666]
# undefined
# L. length()
# 6

# 1. push(777)
# 7
# 1
# (7) [111, 222, 333，444, 555， 666， 777]

# L. pop()
# 777
# L
# (6) [111, 222, 333，444, 555, 666]

# L. unshift(123)
# 7
# L
# 1(7) [123, 111, 222, 333, 444, 555, 666]

# L.shift()
# 123

# L.slice(0,3)
# (3) [111, 222, 333]
# L. reverse()
# (6) [666, 555, 444, 333, 222, 111]

# L. join('$')
# 666$555$444$333$222$111"
# L. concat([111,222,3331)

# L(9) [666, 555, 444, 333, 222, 111, 111, 222, 333]
# L.sort()
# 上(6) [111, 222, 333, 444, 555, 666]

# # 重要方法
# var ll =[ 111, 222 ,333, 444,555, 666]
# ll. forEach ( function (value) {console.1og(value)},11)
# 一个参数就一个元素对象

# ll. forEach ( function (value,index) {console.1og(value,index)},11)
# 元素+元素索引

# ll. forEach ( function (value,index,arr) {console.1og(value,index,arr)},11)
# 元素+元素索引+元素数据来源
# 不能有第四个参数

# 11 
# (6) [111， 222， 333， 444, 555， 666]
# 11.splice(0,3)
# (3) [ 111，222， 333 ]
# 11
# (3) [444, 555， 666]
# 11.splice(0,1,777)
# [444]
# ll
# (3) [777， 555， 666]
# 11.splice(0,1, [111, 222,333,444])
# [777]
# 11
# (3) [Array(4)， 555， 666]


# 11. map(function(value, index){return value*2}, 11)
# ll(6) [22, 44，66, 88， 110， 132] .
# 与foreach差不多
# ============================================
# 运算符
# #算术运算符
# var x=10;
# var res1 = x++ ;
# var res2 = ++x; 
# res1 10
# res2 12
# ++表示自增1类似于+=1
# 加号在前先加后赋值 加号在后先赋值后加

# 比较运算符
# 1 =='1' #弱等于内部自动转换成相同的数据类型比较了
# true
# 1 ==='1'
# False
#强等于内部不做类型转换
# 1 != '1'
# false
# 1!=='2'
# true


# #逻辑运算符
# # python中and or not
# # js中&& || !
# ============================================
# 流程控制
# if (age<18){
# console. log("培养一下")
# }else if(age<24){
# console. log( '小姐姐你好我是你的粉丝' )
# }else{
# console. log( '你是个好人' )
# }
# 在js中代码是没有缩进的只不过我们处于python书写习惯人为的加上了而已
# ()条件
# {}代码块


# # switch语法
# var num = 2;
# switch ( num) {
# case 0:
# console. log( '喝酒');
# break;
# case 1:
# console.1og('唱歌' );
# break;
# case 2:
# console.1og( '洗脚');
# break;
# case 3:
# console.log( '按摩');
# break;
# case 4:
# console. log('营养快线');
# break;
# case 5:
# console.log( '老板慢走欢迎下次光临' );
# break;
# }
# default:
# console. log('条件都没有匹配上默认走的流程' )
# }

# # for循环
# #打印0-9数字
# for(let i=0;i<10;i++){
# console.log(i )
# }
# #题目1 循环打印出数组里面的每- 个元素
# var 11 = [111,222,333,444,555, 666]
# for(let i=0;i<11.1ength;i++){
# console.1og(11[i])
# }

# # while循环
# var i=0
# while(i<100){
# console.1og(i)
# i++;

# #三元运算符
# # python中3 元运算符res = 1 if 1>2 else 3
# # JS中三元运算
# res = 1>2?1:3
# 条件成立取问好后面的1不成立取冒号后面的3
# var res = 2>5?8:10. # 10
# ============================================
# 函数
# #在python定义函数需要 用到关键字def
# #在js中定义函数需要用到关键字function
# #格式
# function函数名(形参1,形参2 ,形参3...){函数体代码}
# #无参函数
# function func1(){
# console. log('hello world')
# func1() # 调用加括调用跟python是一样的
# #有参函数
# function func2(a,b){
# console.log(a,b)
# func2(1,2)
# func2(1,2,3,4,5,6,7,8,9) # 多了没关系只要对应的数据
# VM3610:2 1 2
# undefined

# #关键字arguments
# function func2(a,b){
# console. 1og( arguments) # 能够获取到函数接受到的所有的参数
# console.1og(a,b)
# }
# function func2(a,b) {
# if ( arguments . length<2){
# console. 1og( '传少了)
# }else if (arguments . length>2){
# console.1og('传多了')
# }else{
# console. log( '正常执行)
# }
# }

# #函数的返回值使用的也是 关键字return
# function index( ){
# return 666 
# }
# function index( ){
# return 666, 777,888,999
# }
# res = index( );
# 999
# res
# 999 # 只能拿到最后一个
# function index( ){
# return [666, 777,888, 999 ]
# } 不支持解压赋值

# #匿名函数就是没有名字
# function( ){
# console. 1og( '哈哈哈')
# }
# var res = function( ){
# console. 1og( '哈哈哈' )
# }


# #箭头函数(要了解一下)
# varfunc1=v=>v;
# var func1=()=>{};
# ““" 箭头左边的是形参右边的是返回值”“"
# 等价于
# var func1 = function(V){
# return V
# }

# var func2 = (arg1,arg2) => arg1+arg2
# 等价于
# var func1 = function(arg1, arg2){
# return arg1+arg2
# }

# 局部变量和全局变量与python一样
# ============================================
# 自定义对象
# #你可以看成是我们python中的字典但是js中的自定义对象要比python里面的字典操作起来更
# 加的方便
# #创建自定义对象{}
# “""第一种创建自定义对象的方式""”
# var d1 = {'name':'jason', 'age' :18}|
# I
# var d = {'name':'jason', 'age' :18}
# typeof d
# "object"
# d[ 'name']
# "jason'
# d. name # 比python从字典获取值更加的方便
# "jason"
# d.age
# 18
# for(let i in d){
# console.1og(i,d[i])
# } #支持for循环暴露给外界可以直接获取的也是键


# ““"第二种创建自定义对象的方式需要 使用关键字new"""
# var d2 = new object() # {}
# d2.name = ' jason'
# "jason
# d2
# {name: "jason"}
# d2['age'] = 18
# 18
# d2
# {name: "jason"
# ，age: 18}

# Date对象
# let d3 = new Date( )
# Fri May 15 2020 14:41:06 GMT+0800 ( 中国标准时间)
# d3. toLocaleString()
# "2020/5/15下午2:41:06"
# #也支持自己手动输入时间
# let d4 = new Date( '2200/11/11 11:11:11' )
# d4. toLocalestring( )
# let d5 = new Date(1111,11,11,11,11,11)
# d5. toLocaleString() # 月份从0开始0-11月
# '1111/12/11. 上午11:11:11"
#时间对象具体方法
# letd6=newDate();
# d6. getDate()获取日
# d6.getDay( )
# 获取星期
# d6. getMonth( )
# 获取月份(0-11)
# d6.getFullYear( )
# 获取完整的年份
# d6. getHours()
# 获取小时
# d6. getMinutes ( )
# 获取分钟
# d6. getSeconds( )
# 获取秒
# d6.getMilliseconds()获取毫秒
# d6. getTime()
# 时间戳

# JSON对象
# 在python中序列化反序列化
# dumps
# 序列化
# loads
# 反序列化

# 在js中也有序列化反序列化
# JSON. stringify( )   dumps
# JSON.parse( )      loads

# let d7 = { 'name': 'jason'，'age' :18}
# let res666 = JSON. stringify(d7)
# "{" name":"jason" , "age":18}"
# JSON.parse (res666 )
# {name: " jason"，age: 18}

# ============================================